





<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" >
<head>
  <meta charset="utf-8">
  
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  
  <title>Getting Started With PAPI &mdash; tvm 0.8.dev1982 文档</title>
  

  
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
  <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
  <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
  <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
  <link rel="stylesheet" href="../../_static/gallery.css" type="text/css" />
  <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
  <link rel="stylesheet" href="../../_static/css/tlcpack_theme.css" type="text/css" />

  
  
    <link rel="shortcut icon" href="../../_static/tvm-logo-square.png"/>
  

  
  
  
  
    
      <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
        <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
        <script src="../../_static/jquery.js"></script>
        <script src="../../_static/underscore.js"></script>
        <script src="../../_static/doctools.js"></script>
        <script src="../../_static/translations.js"></script>
    
    <script type="text/javascript" src="../../_static/js/theme.js"></script>

    
    <script type="text/javascript" src="../../_static/js/tlcpack_theme.js"></script>
    <link rel="index" title="索引" href="../../genindex.html" />
    <link rel="search" title="搜索" href="../../search.html" />
    <link rel="next" title="Handle TVM Errors" href="../../errors.html" />
    <link rel="prev" title="Profile Models" href="index.html" /> 
</head>

<body class="wy-body-for-nav">

   
  <div class="wy-grid-for-nav">
    
    
<header class="header">
    <div class="innercontainer">
      <div class="headerInner d-flex justify-content-between align-items-center">
          <div class="headerLogo">
               <a href="https://tvm.apache.org/"><img src=https://tvm.apache.org/assets/images/logo.svg alt="logo"></a>
          </div>

          <div id="headMenu" class="headerNav">
            <button type="button" id="closeHeadMenu" class="navCloseBtn"><img src="../../_static/img/close-icon.svg" alt="Close"></button>
             <ul class="nav">
                <li class="nav-item">
                   <a class="nav-link" href=https://tvm.apache.org/community>Community</a>
                </li>
                <li class="nav-item">
                   <a class="nav-link" href=https://tvm.apache.org/download>Download</a>
                </li>
                <li class="nav-item">
                   <a class="nav-link" href=https://tvm.apache.org/vta>VTA</a>
                </li>
                <li class="nav-item">
                   <a class="nav-link" href=https://tvm.apache.org/blog>Blog</a>
                </li>
                <li class="nav-item">
                   <a class="nav-link" href=https://tvm.apache.org/docs>Docs</a>
                </li>
                <li class="nav-item">
                   <a class="nav-link" href=https://tvmconf.org>Conference</a>
                </li>
                <li class="nav-item">
                   <a class="nav-link" href=https://github.com/apache/tvm/>Github</a>
                </li>
                <li class="nav-item">
                   <a class="nav-link" href=https://tvmchinese.github.io/declaration_zh_CN.html>About-Translators</a>
                </li>
             </ul>
               <div class="responsivetlcdropdown">
                 <button type="button" class="btn-link">
                   ASF
                 </button>
                 <ul>
                     <li>
                       <a href=https://apache.org/>Apache Homepage</a>
                     </li>
                     <li>
                       <a href=https://www.apache.org/licenses/>License</a>
                     </li>
                     <li>
                       <a href=https://www.apache.org/foundation/sponsorship.html>Sponsorship</a>
                     </li>
                     <li>
                       <a href=https://www.apache.org/security/>Security</a>
                     </li>
                     <li>
                       <a href=https://www.apache.org/foundation/thanks.html>Thanks</a>
                     </li>
                     <li>
                       <a href=https://www.apache.org/events/current-event>Events</a>
                     </li>
                     <li>
                       <a href=https://www.zhihu.com/column/c_1429578595417563136>Zhihu</a>
                     </li>
                 </ul>
               </div>
          </div>
            <div class="responsiveMenuIcon">
              <button type="button" id="menuBtn" class="btn-menu"><img src="../../_static/img/menu-icon.svg" alt="Menu Icon"></button>
            </div>

            <div class="tlcDropdown">
              <div class="dropdown">
                <button type="button" class="btn-link dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                  ASF
                </button>
                <div class="dropdown-menu dropdown-menu-right">
                  <ul>
                     <li>
                       <a href=https://apache.org/>Apache Homepage</a>
                     </li>
                     <li>
                       <a href=https://www.apache.org/licenses/>License</a>
                     </li>
                     <li>
                       <a href=https://www.apache.org/foundation/sponsorship.html>Sponsorship</a>
                     </li>
                     <li>
                       <a href=https://www.apache.org/security/>Security</a>
                     </li>
                     <li>
                       <a href=https://www.apache.org/foundation/thanks.html>Thanks</a>
                     </li>
                     <li>
                       <a href=https://www.apache.org/events/current-event>Events</a>
                     </li>
                     <li>
                       <a href=https://www.zhihu.com/column/c_1429578595417563136>Zhihu</a>
                     </li>
                  </ul>
                </div>
              </div>
          </div>
       </div>
    </div>
 </header>
 
    <nav data-toggle="wy-nav-shift" class="wy-nav-side fixed">
      <div class="wy-side-scroll">
        <div class="wy-side-nav-search" >
          

          
            <a href="../../index.html">
          

          
            
            <img src="../../_static/tvm-logo-small.png" class="logo" alt="Logo"/>
          
          </a>

          
            
            
                <div class="version">
                  0.8.dev1982
                </div>
            
          

          
<div role="search">
  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
    <input type="text" name="q" placeholder="Search docs" />
    <input type="hidden" name="check_keywords" value="yes" />
    <input type="hidden" name="area" value="default" />
  </form>
</div>

          
        </div>

        
        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
          
            
            
              
            
            
              <p class="caption" role="heading"><span class="caption-text">如何开始</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../install/index.html">安装 TVM</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../contribute/index.html">贡献者指南</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">用户引导</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../tutorial/index.html">User Tutorial</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../index.html">How To Guides</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../compile_models/index.html">编译深度学习模型</a></li>
<li class="toctree-l2"><a class="reference internal" href="../deploy/index.html">TVM 部署模型和集成</a></li>
<li class="toctree-l2"><a class="reference internal" href="../work_with_relay/index.html">Work With Relay</a></li>
<li class="toctree-l2"><a class="reference internal" href="../work_with_schedules/index.html">Work With Tensor Expression and Schedules</a></li>
<li class="toctree-l2"><a class="reference internal" href="../optimize_operators/index.html">优化张量算子</a></li>
<li class="toctree-l2"><a class="reference internal" href="../tune_with_autotvm/index.html">Auto-Tune with Templates and AutoTVM</a></li>
<li class="toctree-l2"><a class="reference internal" href="../tune_with_autoscheduler/index.html">Use AutoScheduler for Template-Free Scheduling</a></li>
<li class="toctree-l2"><a class="reference internal" href="../work_with_microtvm/index.html">Work With microTVM</a></li>
<li class="toctree-l2"><a class="reference internal" href="../extend_tvm/index.html">Extend TVM</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="index.html">Profile Models</a><ul class="current">
<li class="toctree-l3 current"><a class="current reference internal" href="#">Getting Started With PAPI</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#installing-papi">Installing PAPI</a></li>
<li class="toctree-l4"><a class="reference internal" href="#building-tvm-with-papi">Building TVM With PAPI</a></li>
<li class="toctree-l4"><a class="reference internal" href="#using-papi-while-profiling">Using PAPI While Profiling</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../errors.html">Handle TVM Errors</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../faq.html">常见提问</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">开发者引导</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../dev/tutorial/index.html">Developer Tutorial</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../dev/how_to/how_to.html">开发者指南</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">架构指南</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../arch/index.html">Design and Architecture</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">主题引导</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../topic/microtvm/index.html">microTVM：裸机使用TVM</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../topic/vta/index.html">VTA: Versatile Tensor Accelerator</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">参考指南</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../reference/langref/index.html">语言参考</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../reference/api/python/index.html">Python API</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../reference/api/links.html">Other APIs</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../reference/publications.html">Publications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../genindex.html">索引</a></li>
</ul>

            
          
        </div>
        
      </div>
    </nav>

    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
      
      <nav class="wy-nav-top" aria-label="top navigation" data-toggle="wy-nav-top">
        
            <div class="togglemenu">

            </div>
            <div class="nav-content">
              <!-- tvm -->
              Table of content
            </div>
        
      </nav>


      <div class="wy-nav-content">
        
        <div class="rst-content">
        

          




















<div role="navigation" aria-label="breadcrumbs navigation">

  <ul class="wy-breadcrumbs">
    
      <li><a href="../../index.html">Docs</a> <span class="br-arrow">></span></li>
        
          <li><a href="../index.html">How To Guides</a> <span class="br-arrow">></span></li>
        
          <li><a href="index.html">Profile Models</a> <span class="br-arrow">></span></li>
        
      <li>Getting Started With PAPI</li>
    
    
      <li class="wy-breadcrumbs-aside">
        
            
            <a href="../../_sources/how_to/profile/papi.rst.txt" rel="nofollow"> <img src="../../_static//img/source.svg" alt="viewsource"/></a>
          
        
      </li>
    
  </ul>

  
  <hr/>
</div>
          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
           <div itemprop="articleBody">
            
  <div class="section" id="getting-started-with-papi">
<h1>Getting Started With PAPI<a class="headerlink" href="#getting-started-with-papi" title="永久链接至标题">¶</a></h1>
<p>The Performance Application Programming Interface (PAPI) is a library that
provides performance counters on a variety of platforms. Performance counters
provide accurate low-level information about processors behavior during a given
execution run. This information can contain simple metrics like total cycle
count, cache misses, and instructions executed as well as more high level
information like total FLOPS and warp occupancy. PAPI makes these metrics
available while profiling.</p>
<div class="section" id="installing-papi">
<h2>Installing PAPI<a class="headerlink" href="#installing-papi" title="永久链接至标题">¶</a></h2>
<p>PAPI can either be installed using your package manager (<code class="docutils literal notranslate"><span class="pre">apt-get</span> <span class="pre">install</span> <span class="pre">libpapi-dev</span></code>
on Ubuntu), or from source here:
<a class="reference external" href="https://bitbucket.org/icl/papi/src/master/">https://bitbucket.org/icl/papi/src/master/</a>.</p>
</div>
<div class="section" id="building-tvm-with-papi">
<h2>Building TVM With PAPI<a class="headerlink" href="#building-tvm-with-papi" title="永久链接至标题">¶</a></h2>
<p>To include PAPI in your build of TVM, set the following line in you <code class="docutils literal notranslate"><span class="pre">config.cmake</span></code>:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">set</span><span class="p">(</span><span class="n">USE_PAPI</span> <span class="n">ON</span><span class="p">)</span>
</pre></div>
</div>
<p>If PAPI is installed in a non-standard place, you can specify where it is like so:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">set</span><span class="p">(</span><span class="n">USE_PAPI</span> <span class="n">path</span><span class="o">/</span><span class="n">to</span><span class="o">/</span><span class="n">papi</span><span class="o">.</span><span class="n">pc</span><span class="p">)</span>
</pre></div>
</div>
</div>
<div class="section" id="using-papi-while-profiling">
<h2>Using PAPI While Profiling<a class="headerlink" href="#using-papi-while-profiling" title="永久链接至标题">¶</a></h2>
<p>If TVM has been built with PAPI (see above), then you can pass a
<code class="xref py py-class docutils literal notranslate"><span class="pre">tvm.runtime.profiling.PAPIMetricCollector</span></code> to
<code class="xref py py-meth docutils literal notranslate"><span class="pre">tvm.runtime.GraphModule.profile()</span></code> to collect performance metrics. Here
is an example:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">target</span> <span class="o">=</span> <span class="s2">&quot;llvm&quot;</span>
<span class="n">dev</span> <span class="o">=</span> <span class="n">tvm</span><span class="o">.</span><span class="n">cpu</span><span class="p">()</span>
<span class="n">mod</span><span class="p">,</span> <span class="n">params</span> <span class="o">=</span> <span class="n">mlp</span><span class="o">.</span><span class="n">get_workload</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>

<span class="n">exe</span> <span class="o">=</span> <span class="n">relay</span><span class="o">.</span><span class="n">vm</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">mod</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">)</span>
<span class="n">vm</span> <span class="o">=</span> <span class="n">profiler_vm</span><span class="o">.</span><span class="n">VirtualMachineProfiler</span><span class="p">(</span><span class="n">exe</span><span class="p">,</span> <span class="n">dev</span><span class="p">)</span>

<span class="n">data</span> <span class="o">=</span> <span class="n">tvm</span><span class="o">.</span><span class="n">nd</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">rand</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">28</span><span class="p">,</span> <span class="mi">28</span><span class="p">)</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="s2">&quot;float32&quot;</span><span class="p">),</span> <span class="n">device</span><span class="o">=</span><span class="n">dev</span><span class="p">)</span>
<span class="n">report</span> <span class="o">=</span> <span class="n">vm</span><span class="o">.</span><span class="n">profile</span><span class="p">(</span>
    <span class="p">[</span><span class="n">data</span><span class="p">],</span>
    <span class="n">func_name</span><span class="o">=</span><span class="s2">&quot;main&quot;</span><span class="p">,</span>
    <span class="n">collectors</span><span class="o">=</span><span class="p">[</span><span class="n">tvm</span><span class="o">.</span><span class="n">runtime</span><span class="o">.</span><span class="n">profiling</span><span class="o">.</span><span class="n">PAPIMetricCollector</span><span class="p">()],</span>
<span class="p">)</span>
<span class="k">print</span><span class="p">(</span><span class="n">report</span><span class="p">)</span>
</pre></div>
</div>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Name</span>                                    <span class="n">perf</span><span class="p">::</span><span class="n">CACHE</span><span class="o">-</span><span class="n">MISSES</span>   <span class="n">perf</span><span class="p">::</span><span class="n">CYCLES</span>  <span class="n">perf</span><span class="p">::</span><span class="n">STALLED</span><span class="o">-</span><span class="n">CYCLES</span><span class="o">-</span><span class="n">BACKEND</span>  <span class="n">perf</span><span class="p">::</span><span class="n">INSTRUCTIONS</span>  <span class="n">perf</span><span class="p">::</span><span class="n">STALLED</span><span class="o">-</span><span class="n">CYCLES</span><span class="o">-</span><span class="n">FRONTEND</span>
<span class="n">fused_nn_dense_nn_bias_add_nn_relu</span>                   <span class="mi">2</span><span class="p">,</span><span class="mi">494</span>      <span class="mi">1</span><span class="p">,</span><span class="mi">570</span><span class="p">,</span><span class="mi">698</span>                        <span class="mi">85</span><span class="p">,</span><span class="mi">608</span>             <span class="mi">675</span><span class="p">,</span><span class="mi">564</span>                         <span class="mi">39</span><span class="p">,</span><span class="mi">583</span>
<span class="n">fused_nn_dense_nn_bias_add_nn_relu_1</span>                 <span class="mi">1</span><span class="p">,</span><span class="mi">149</span>        <span class="mi">655</span><span class="p">,</span><span class="mi">101</span>                        <span class="mi">13</span><span class="p">,</span><span class="mi">278</span>             <span class="mi">202</span><span class="p">,</span><span class="mi">297</span>                         <span class="mi">21</span><span class="p">,</span><span class="mi">380</span>
<span class="n">fused_nn_dense_nn_bias_add</span>                             <span class="mi">288</span>        <span class="mi">600</span><span class="p">,</span><span class="mi">184</span>                         <span class="mi">8</span><span class="p">,</span><span class="mi">321</span>             <span class="mi">163</span><span class="p">,</span><span class="mi">446</span>                         <span class="mi">19</span><span class="p">,</span><span class="mi">513</span>
<span class="n">fused_nn_batch_flatten</span>                                 <span class="mi">301</span>        <span class="mi">587</span><span class="p">,</span><span class="mi">049</span>                         <span class="mi">4</span><span class="p">,</span><span class="mi">636</span>             <span class="mi">158</span><span class="p">,</span><span class="mi">636</span>                         <span class="mi">18</span><span class="p">,</span><span class="mi">565</span>
<span class="n">fused_nn_softmax</span>                                       <span class="mi">154</span>        <span class="mi">575</span><span class="p">,</span><span class="mi">143</span>                         <span class="mi">8</span><span class="p">,</span><span class="mi">018</span>             <span class="mi">160</span><span class="p">,</span><span class="mi">738</span>                         <span class="mi">18</span><span class="p">,</span><span class="mi">995</span>
<span class="o">----------</span>
<span class="n">Sum</span>                                                  <span class="mi">4</span><span class="p">,</span><span class="mi">386</span>      <span class="mi">3</span><span class="p">,</span><span class="mi">988</span><span class="p">,</span><span class="mi">175</span>                       <span class="mi">119</span><span class="p">,</span><span class="mi">861</span>           <span class="mi">1</span><span class="p">,</span><span class="mi">360</span><span class="p">,</span><span class="mi">681</span>                        <span class="mi">118</span><span class="p">,</span><span class="mi">036</span>
<span class="n">Total</span>                                               <span class="mi">10</span><span class="p">,</span><span class="mi">644</span>      <span class="mi">8</span><span class="p">,</span><span class="mi">327</span><span class="p">,</span><span class="mi">360</span>                       <span class="mi">179</span><span class="p">,</span><span class="mi">310</span>           <span class="mi">2</span><span class="p">,</span><span class="mi">660</span><span class="p">,</span><span class="mi">569</span>                        <span class="mi">270</span><span class="p">,</span><span class="mi">044</span>
</pre></div>
</div>
<p>You can also change which metrics are collected:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">report</span> <span class="o">=</span> <span class="n">vm</span><span class="o">.</span><span class="n">profile</span><span class="p">(</span>
    <span class="p">[</span><span class="n">data</span><span class="p">],</span>
    <span class="n">func_name</span><span class="o">=</span><span class="s2">&quot;main&quot;</span><span class="p">,</span>
    <span class="n">collectors</span><span class="o">=</span><span class="p">[</span><span class="n">tvm</span><span class="o">.</span><span class="n">runtime</span><span class="o">.</span><span class="n">profiling</span><span class="o">.</span><span class="n">PAPIMetricCollector</span><span class="p">({</span><span class="n">dev</span><span class="p">:</span> <span class="p">[</span><span class="s2">&quot;PAPI_FP_OPS&quot;</span><span class="p">])],</span>
<span class="p">)</span>
</pre></div>
</div>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Name</span>                                  <span class="n">PAPI_FP_OPS</span>
<span class="n">fused_nn_dense_nn_bias_add_nn_relu</span>        <span class="mi">200</span><span class="p">,</span><span class="mi">832</span>
<span class="n">fused_nn_dense_nn_bias_add_nn_relu_1</span>       <span class="mi">16</span><span class="p">,</span><span class="mi">448</span>
<span class="n">fused_nn_dense_nn_bias_add</span>                  <span class="mi">1</span><span class="p">,</span><span class="mi">548</span>
<span class="n">fused_nn_softmax</span>                              <span class="mi">160</span>
<span class="n">fused_nn_batch_flatten</span>                          <span class="mi">0</span>
<span class="o">----------</span>
<span class="n">Sum</span>                                       <span class="mi">218</span><span class="p">,</span><span class="mi">988</span>
<span class="n">Total</span>                                     <span class="mi">218</span><span class="p">,</span><span class="mi">988</span>
</pre></div>
</div>
<p>You can find a list of available metrics by running the <code class="docutils literal notranslate"><span class="pre">papi_avail</span></code> and
<code class="docutils literal notranslate"><span class="pre">papi_native_avail</span></code> commands.</p>
</div>
</div>


           </div>
           
          </div>
          

<footer>

    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
      
        <a href="../../errors.html" class="btn btn-neutral float-right" title="Handle TVM Errors" accesskey="n" rel="next">下一个 <span class="fa fa-arrow-circle-right"></span></a>
      
      
        <a href="index.html" class="btn btn-neutral float-left" title="Profile Models" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> 上一个</a>
      
    </div>

<div id="button" class="backtop"><img src="../../_static//img/right.svg" alt="backtop"/> </div>
<section class="footerSec">
    <div class="footerHeader">
      <ul class="d-flex align-md-items-center justify-content-between flex-column flex-md-row">
        <li class="copywrite d-flex align-items-center">
          <h5 id="copy-right-info">© 2020 Apache Software Foundation | All right reserved</h5>
        </li>
      </ul>

    </div>

    <ul>
      <li class="footernote">Copyright © 2020 The Apache Software Foundation. Apache TVM, Apache, the Apache feather, and the Apache TVM project logo are either trademarks or registered trademarks of the Apache Software Foundation.</li>
    </ul>

</section>
</footer>
        </div>
      </div>

    </section>

  </div>
  

    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>

  </body>
  <script type="text/javascript">
      jQuery(function () {
          SphinxRtdTheme.Navigation.enable(true);
      });
  </script>

  
  
    
    <!-- Theme Analytics -->
    <script>
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
      (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
      m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
    })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

    ga('create', 'UA-75982049-2', 'auto');
    ga('send', 'pageview');
    </script>

    
   

</body>
</html>